package com.wr.api.system.service;

import cn.hutool.system.UserInfo;
import com.wr.api.system.domain.LoginUser;
import com.wr.api.system.domain.SysUserWxBo;
import com.wr.api.system.factory.RemoteSystemFallbackFactory;
import com.wr.common.core.constants.ServerNameConstants;
import com.wr.common.core.result.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

/**
 * 用户服务
 *
 * @author demo
 */
@FeignClient(contextId = "remoteSystemService", value = ServerNameConstants.SYSTEM_SERVER, fallbackFactory = RemoteSystemFallbackFactory.class)
public interface RemoteSystemService {
    /**
     * 通过用户名查询用户信息
     *
     * @param uk     用户名
     * @return 结果
     */
    @GetMapping("/auth/infoByUk/{uk}")
    public R<LoginUser> getUserInfoByUk(@PathVariable("uk") String uk);


    /**
     * 通过手机号查询用户信息
     *
     * @param mobile   用户名
     * @param isCreate 没有数据是否创建
     * @return 结果
     */
    @GetMapping("/auth/infoByMobile")
    public R<LoginUser> getUserInfoByMobile(@RequestParam("mobile") String mobile, @RequestParam("isCreate") Boolean isCreate);


    /**
     * 通过邮箱查询用户信息
     *
     * @param mailbox  用户名
     * @param isCreate 没有数据是否创建
     * @return 结果
     */
    @GetMapping("/auth/infoByMailbox")
    public R<LoginUser> getUserInfoByMailbox(@RequestParam("mailbox") String mailbox, @RequestParam("isCreate") Boolean isCreate);

    /**
     * 通过微信查询用户信息
     *
     * @param sysUserWxBo 用户信息
     * @return 结果
     */
    @PostMapping("/auth/infoByWx")
    public R<LoginUser> getUserInfoByWx(@RequestBody SysUserWxBo sysUserWxBo);



    /**
     * 用户注册
     *
     * @param uk
     * @param pk
     * @return
     */
    @GetMapping("/auth/register")
    public R<Boolean> registerUserInfo(@RequestParam("uk") String uk, @RequestParam("pk") String pk);

    /**
     * 获取系统配置项
     *
     * @param configKey 用户信息
     * @return 结果
     */
    @GetMapping("/sys-config/configValue/{configKey}")
    public R<String> getConfigInfo(@PathVariable("configKey") String configKey);
}
